package com.ssy.lingxi.settle.accounts.service;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.contract.api.model.vo.request.ContractPageRequest;
import com.ssy.lingxi.contract.api.model.vo.response.ContractPageResponse;
import com.ssy.lingxi.marketing.api.model.request.CouponQueryReq;
import com.ssy.lingxi.marketing.api.model.response.CouponInfoResp;
import com.ssy.lingxi.message.api.vo.request.SystemMessageRequest;
import com.ssy.lingxi.order.api.model.vo.request.*;
import com.ssy.lingxi.order.api.model.vo.response.*;
import com.ssy.lingxi.pay.api.dto.request.eAccount.EAccountOrderPayRequest;
import com.ssy.lingxi.pay.api.dto.request.eAccount.PlatFormRePayRequest;
import com.ssy.lingxi.pay.api.dto.request.eAccount.PlatFormTransferRequest;
import com.ssy.lingxi.pay.api.model.vo.response.allInPay.ApplicationTransferRespVO;
import com.ssy.lingxi.pay.api.model.vo.response.allInPay.SignalAgentPayRespVO;
import com.ssy.lingxi.report.api.vo.request.OperateNoticeVO;
import com.ssy.lingxi.workflow.api.model.vo.request.ExternalProcessQueryVO;
import com.ssy.lingxi.workflow.api.model.vo.request.TaskExecuteVO;
import com.ssy.lingxi.workflow.api.model.vo.response.ComplexTaskCompleteVO;
import com.ssy.lingxi.workflow.api.model.vo.response.SimpleProcessDefVO;

import java.util.List;

/**
 * 内部接口服务
 * @author 伍将
 * @date 2020/11/26
 * @version 2.0.0
 */
public interface IFeignService {

    /**
     * 发送系统消息
     * @author 伍将
     * @date 2020/12/22
     * @param request :
     **/
    void sendSystemMessage(SystemMessageRequest request);

    /**
     * 批量发送系统消息
     * @author 伍将
     * @date 2021/1/20
     * @param request: 请求参数
     **/
    void batchSendSystemMessage(List<SystemMessageRequest> request);

    /**
     * 批量新增系统操作通知
     * @author 伍将
     * @date 2021/1/20
     * @param operateVOList: 操作通知
     **/
    void addSystemOperateNoticeList(List<OperateNoticeVO> operateVOList);

    /**
     * 新增开票操作通知
     * @author 伍将
     * @date 2020/11/26
     * @param memberId :
     * @param roleId :
     * @param status :
     **/
    void addReceiptInvoiceOperateNotice(Long memberId, Long roleId, Integer status);

    /**
     * 查询订单发票
     * @param orderNo 订单编码
     * @return 订单发票
     */
    Wrapper<OrderSettleAccountInvoiceFeignDetailVO> findSettleAccountInvoiceDetail(String orderNo);

    /**
     * 通联支付-托管代付
     * @param request 通联支付-托管代付 请求参数
     * @return 托管代付响应实体类
     */
    Wrapper<SignalAgentPayRespVO> allInPayEscrowPayment(PlatFormRePayRequest request);

    /**
     * 通联支付-消费申请 (商户直接到账)
     * @param request 接口参数
     * @return 支付信息
     */
    Wrapper<String> allInPayConsumeApply(EAccountOrderPayRequest request);

    /**
     * 获取结算支付方式
     * @return 获取结算支付方式
     */
    Wrapper<List<PlatformSettlementTypeVO>> findSettlementType();

    /**
     * 获取通联支付-支付渠道
     * @param request 查询条件
     * @return 支付渠道
     */
    Wrapper<List<MemberSettleChannelVO>> findSettlementChannel(MemberSettleChannelQueryVO request);

//    /**
//     * 获取结算订单明细订单支付信息
//     * @param request 查询订单号集合
//     * @return 订单支付信息
//     */
//    Wrapper<List<OrderAfterSalePaymentFeignDetailVO>> findOrderSettlementPayment(OrderIdsFeignVO request);

    /**
     * 启动业务对账流程
     * @param vendorMemberId 对账供应商会员id
     * @param vendorRoleId 对账供应商角色id
     * @param id 业务对账单id
     * @return 流程任务id和流程外部状态
     */
    Wrapper<ComplexTaskCompleteVO> startBusinessReconciliation(Long vendorMemberId, Long vendorRoleId, Long id);

    /**
     * 提交业务对账单
     * @param request 请求
     * @return 流程任务id和流程外部状态
     */
    Wrapper<ComplexTaskCompleteVO> completeBusinessReconciliation(TaskExecuteVO request);

    /**
     * 获取外部流程定义
     * @param request 查询请求
     * @return 返回外部流程订单
     */
    Wrapper<SimpleProcessDefVO> getLogOtherState(ExternalProcessQueryVO request);

    /**
     * 根据请款单类型查询可请款订单数据
     * @param queryParameter 查询条件
     * @return 可请款订单数据
     */
    Wrapper<PageData<OrderBuyerSettleQueryVO>> findApplyAmountRowSourceOrders(OrderBuyerSettlePageVO queryParameter);

    /**
     * 根据请款单类型查询可请款合同数据
     * @param queryParameter 查询条件
     * @return 可请款合同数据
     */
    Wrapper<PageData<ContractPageResponse>> findApplyAmountRowSourceContracts(ContractPageRequest queryParameter);

    /**
     * 通联支付-平台转账
     * @param request 请求
     * @return 转账结果
     */
    Wrapper<ApplicationTransferRespVO> platFormTransfer(PlatFormTransferRequest request);

    /**
     * 更新对应订单支付批次已结算
     * @param request 订单id、批次
     * @return 更新结果
     */
    Wrapper<Void> updateOrderDeliveries(OrderUpdateDeliveriesFeignVO request);

    /**
     * 结算服务 - 协同对账 - 对账单生成请款单采购订单数据
     * @param orderFeignIdsVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<OrderBuyerSettleReconciliationFeignVO>> settleReconciliationBuyerOrders(OrderFeignIdsVO orderFeignIdsVO);

    /**
     *  内部接口 - 根据优惠券ids，查询券码
     * @param request 根据优惠券ids
     * @return 查询券码
     */
    Wrapper<List<CouponInfoResp>> getCouponDetailListByIds(CouponQueryReq request);
}
